package com.xltt.watchlauncher3.utils;

import android.os.AsyncTask;

/**
 * Created by Administrator on 2019/1/15.
 */

public class AsyncTaskUtils<T> extends AsyncTask<T, Integer, T> {
    private TaskListener mTaskListener;

    public AsyncTaskUtils() {

    }

    @Override
    protected void onPreExecute() {
//        Log.d("AsyncTaskUtils","onPreExecute");
        if (mTaskListener != null) {
            mTaskListener.onPreExecute();
        }
    }

    @Override
    protected T doInBackground(T... ts) {
//        Log.d("AsyncTaskUtils","doInBackground");
        if (mTaskListener != null) {
            return (T) mTaskListener.doInBackground(ts[0]);
        }
        return null;
    }

    @Override
    protected void onPostExecute(T t) {
//        Log.d("AsyncTaskUtils","onPostExecute");
        if (mTaskListener != null) {
            mTaskListener.onPostExecute(t);
        }
    }

    /**
     * 更新子线程进度，运行于UI线程
     *
     * @param values
     */
    @Override
    protected void onProgressUpdate(Integer... values) {
//        Log.d("AsyncTaskUtils","onProgressUpdate");
        if (mTaskListener != null) {
            mTaskListener.onProgressUpdate(values[0]);
        }
    }


    public AsyncTaskUtils setTaskListener(TaskListener taskListener) {
        this.mTaskListener = taskListener;
        return this;
    }

    /**
     * 更新进度
     *
     * @param progress
     */
    public void updateProgress(int progress) {
        publishProgress(progress);
    }

    public interface TaskListener<T> {
        void onPreExecute();

        void onProgressUpdate(int progress);

        T doInBackground(T t);

        void onPostExecute(T t);
    }

    /**
     * 取消一个正在执行的任务
     */
    public void cancle() {
        if (!isCancelled()) {
            cancel(true);
        }
    }
}
